package com.yugao.fintech.antelope.infra.dict.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yugao.fintech.antelope.infra.module.dict.model.entity.DictItem;
import com.yugao.fintech.antelope.infra.module.dict.model.rqrs.DictItemListReq;

import java.util.List;
import java.util.Map;

/**
 * 字典业务层

 */
public interface DictItemService extends IService<DictItem> {

    /**
     * 根据字典类型查询字典数据
     *
     * @param dictCode 字典编码
     * @return 字典数据集合信息
     */
    List<DictItem> listByDictCode(String dictCode);

    /**
     * 通过code集合获取字典
     * @param codes code
     * @return key = code
     *         value (字典的键值对)
     *           key = itemValue
     *           value = SysDictItemPO 对象
     */
    Map<String, Map<String, DictItem>> listByCodes(List<String> codes);

    /**
     * 根据字典编码 + 字典值查询查询字典条目
     * @param dictType 字典编码
     * @param dictCode 字典值
     * @return 字典数据集合信息
     */
    DictItem getDictItem(String dictType, String dictCode);

    /**
     * 根据条件分页查询字典数据
     *
     * @param req 字典数据信息
     * @return 字典数据集合信息
     */
    List<DictItem> listItem(DictItemListReq req);

    /**
     * 批量删除字典数据信息
     *
     * @param dictIds 需要删除的字典ID
     */
    void deleteByIds(Long[] dictIds);

    /**
     * 批量删除字典数据信息
     *
     * @param dictId 需要删除的字典ID
     */
    void deleteById(Long dictId);

    /**
     * 新增保存字典数据信息
     *
     * @param dictData 字典数据信息
     * @return 结果
     */
    boolean saveDictItem(DictItem dictData);

    /**
     * 修改保存字典数据信息
     *
     * @param dictData 字典数据信息
     * @return 结果
     */
    boolean updateDictItem(DictItem dictData);


    void resetDictCache();
}
